/**
 * Created by 虚明 on 2017-6-29.
 *
 * 我想实现通过html对js的引用打包生成对应的js文件
 * 而不是通过配置来生成
 *
 * requireJS对每个业务模块都只有一个入口，因此对于这部分可以压缩成一个文件
 *
 * 可不可以用combo的方式，对来源地址进行合并，参数为各js文件地址
 * 类似yuicombo的效果
 *
 * 功能包含校验、编译、压缩、合并等
 *
 * 构建则不同，通过编译生成到指定位置，合并可以不在构建时触发
 *
 * 当前示例是一个入口文件，如果是查找html为入口文件呢？
 *
 * 要解决的问题：
 * 1.缓存问题
 * 2.html入口问题
 */

var gulp = require('gulp');
// js语法校验
var jshint = require('gulp-jshint');
var amdOptimize = require('amd-optimize');
// 合并
var concat = require('gulp-concat');
var less = require('gulp-less');
// 压缩样式
var minifyCss = require('gulp-minify-css');
// 重命名
var rename = require('gulp-rename');
// 压缩js
var uglify = require('gulp-uglify');

var requirejsOptimize = require('gulp-requirejs-optimize');
// md5
var rev = require('gulp-rev');

var sourcemaps = require('gulp-sourcemaps');

/**
 * js语法校验
 */
gulp.task('lint', function() {
  // 检查src底下js文件是否有脚本错误
  gulp.src('./src/*.js')
    .pipe(jshint())
    .pipe(jshint.reporter('default'));
});

/**
 * r.js合并require依赖的js文件
 */
gulp.task('rjs', function() {
  gulp.src('./src/**/*.js')
    .pipe(sourcemaps.init())
    .pipe(requirejsOptimize({
      mainConfigFile: 'require.config.js',
      //paths: {
      //  'jquery': 'empty:'   // :empty 代表忽略该文件，实测表示不加入到依赖
      //}
    }))
    //.pipe(concat('test.js'))
    // md5
    //.pipe(rev())
    .pipe(uglify({
      sourceMap: true,
      output: {
        comments: 'license'
      }
    }))
    .pipe(sourcemaps.write('./maps'))
    .pipe(gulp.dest('dest/js'))
    .on('end', function () {
      console.log('已完成');
    });
});


gulp.task('default', ['lint', 'rjs'], function() {
  console.log('default init');
});